package com.zenithmind.task.service.base;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;

/**
 * 基础任务服务接口
 * 遵循接口隔离原则：定义最小化的基础操作接口
 * 
 * @param <T> 实体类型
 * @param <V> VO类型
 * @param <Q> 查询条件类型
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BaseTaskService<T, V, Q> extends IService<T> {

    /**
     * 分页查询
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<V> getPage(Q query, String userId);

    /**
     * 根据ID查询详情
     * 
     * @param id 主键ID
     * @param userId 当前用户ID
     * @return 详情信息
     */
    V getDetailById(String id, String userId);

    /**
     * 创建记录
     * 
     * @param entity 实体对象
     * @param userId 操作者ID
     * @return 创建结果
     */
    Boolean create(T entity, String userId);

    /**
     * 更新记录
     * 
     * @param entity 实体对象
     * @param userId 操作者ID
     * @return 更新结果
     */
    Boolean update(T entity, String userId);

    /**
     * 删除记录
     * 
     * @param id 主键ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean delete(String id, String userId);

    /**
     * 检查操作权限
     * 
     * @param entity 实体对象
     * @param userId 用户ID
     * @param action 操作类型
     * @return 是否有权限
     */
    Boolean checkPermission(T entity, String userId, String action);
}
